/**
 *	@brief	サファリシステムヘッダ
 *	@author	Miyuki Iwasawa
 *	@date	08.10.07
 */

#ifndef __H_SAFARI_SYS_H__
#define __H_SAFARI_SYS_H__

#include "savedata/safari_sv.h"
#include "field/encount_set.h"

//サファリオブジェ解放レベル
typedef enum{
 SAFARI_OBJ_LEVEL0,	//未解放
 SAFARI_OBJ_LEVEL1,	//デフォルト
 SAFARI_OBJ_LEVEL2,
 SAFARI_OBJ_LEVEL3,
 SAFARI_OBJ_LEVEL4,
 SAFARI_OBJ_LEVEL_MAX = SAFARI_OBJ_LEVEL4,
}SAFARI_OBJ_LEVEL;

//サファリマップ属性値
typedef enum{
 SAFARI_ATTR_NONE,
 SAFARI_ATTR_GRASS,
 SAFARI_ATTR_TREE,
 SAFARI_ATTR_ROCK,
 SAFARI_ATTR_WATER,
 SAFARI_ATTR_MAX,
}SAFARI_ATTR;

//サファリオブジェクトデータパラメータ
typedef struct{
 u8	obj_id;	///<オブジェクトID
 u8	mode_f:1;
 u8	siz_x:3;
 u8	siz_z:3;
 u8	sex_f:1;
 u8	attr;
}SAFARI_OBJ_PARAM;

///サファリブロックレベル
typedef struct _SAFARI_BLOCK_LEVEL{
	u8	level[SAFARI_ATTR_MAX-1];
	u8	obj_num[SAFARI_ATTR_MAX-1];
}SAFARI_BLOCK_LEVEL;

//サファリエンカウントポケモンテーブルのサイズ
#define SAFARI_ENC_POKE_NUM	(10)

///サファリエンカウントモード
typedef enum{
 SAFARI_ENC_GROUND,
 SAFARI_ENC_WATER,
 SAFARI_ENC_FISH1,
 SAFARI_ENC_FISH2,
 SAFARI_ENC_FISH3,
 SAFARI_ENC_MODE_MAX,
}SAFARI_ENC_MODE;

typedef struct _SAFARI_ENC_POKE{
 u16 monsno;
 u16 level;
}SAFARI_ENC_POKE;

typedef struct _SAFARI_ENC_DATA{
	SAFARI_ENC_POKE	poke[SAFARI_ENC_POKE_NUM];
}SAFARI_ENC_DATA;

/*
 *	@brief	サファリオブジェクトのパラメータを構造体型にコピー
 *
 *	＊領域は呼び出し側で確保すること
 */
extern void SafariData_GetObjectParam(SAFARI_OBJ_PARAM* prm,SAFARI_OBJ_ID id,u8 my_sex);

/*
 *	@brief	サファリのエンカウントテーブルをアロケーションして取得する
 *
 *	＊呼び出し側が利用後に解放すること！
 */
extern ENC_COMMON_DATA* FieldSafari_AllocEncountTbl(
	SAFARI_LAYOUT* layout,SAFARI_BLOCK_ID block_id,SAFARI_ENC_MODE mode,int time_zone,int heapID);

/**
 *	@brief	サファリのレベルアップ処理(日付変更処理で一日一回だけ呼び出す)
 */
extern void SafariData_Update(SAVEDATA* save,s32 diff_days);

/**
 *	@brief	サファリブロックレベル取得
 */
extern void SafariData_GetBlockAttrLevel(SAFARI_LAYOUT* layout,int block_id,SAFARI_BLOCK_LEVEL* pl);

#endif	//__H_SAFARI_SYS_H__